package co.edu.usbcali.unidad.dataaccess.daoFactory;

import co.edu.usbcali.unidad.dataaccess.dao.*;

/**
 * Factory for Data Access Objects Strategy The DAO pattern can be made highly
 * flexible by adopting the Abstract Factory [GoF] and the Factory Method [GoF]
 * patterns. When the underlying storage is not subject to change from one
 * implementation to another, this strategy can be implemented using the Factory
 * Method pattern to produce a number of DAOs needed by the application. This
 * class is a Factory Method pattern
 **/
public class XMLHibernateDaoFactory {
	private static XMLHibernateDaoFactory instance = null;

	private XMLHibernateDaoFactory() {
	}

	/**
	 * 
	 * @return HibernateDaoFactory
	 */
	public static XMLHibernateDaoFactory getInstance() {
		if (instance == null) {
			instance = new XMLHibernateDaoFactory();
		}

		return instance;
	}

	/**
	 * This method instantiates the IAdministradorDAO class for HibernateCore
	 * that is used in this applications deployment environment to access the
	 * data.
	 * 
	 * @return IAdministradorDAO implementation
	 */
	public IAdministradorDAO getAdministradorDAO() {
		return new AdministradorDAO();
	}

	/**
	 * This method instantiates the IAutorizacionDAO class for HibernateCore
	 * that is used in this applications deployment environment to access the
	 * data.
	 * 
	 * @return IAutorizacionDAO implementation
	 */
	public IAutorizacionDAO getAutorizacionDAO() {
		return new AutorizacionDAO();
	}

	/**
	 * This method instantiates the ICiudadDAO class for HibernateCore that is
	 * used in this applications deployment environment to access the data.
	 * 
	 * @return ICiudadDAO implementation
	 */
	public ICiudadDAO getCiudadDAO() {
		return new CiudadDAO();
	}

	/**
	 * This method instantiates the IConceptoDAO class for HibernateCore that is
	 * used in this applications deployment environment to access the data.
	 * 
	 * @return IConceptoDAO implementation
	 */
	public IConceptoDAO getConceptoDAO() {
		return new ConceptoDAO();
	}

	/**
	 * This method instantiates the ICorrespondenciaDAO class for HibernateCore
	 * that is used in this applications deployment environment to access the
	 * data.
	 * 
	 * @return ICorrespondenciaDAO implementation
	 */
	public ICorrespondenciaDAO getCorrespondenciaDAO() {
		return new CorrespondenciaDAO();
	}

	/**
	 * This method instantiates the ICuentaDAO class for HibernateCore that is
	 * used in this applications deployment environment to access the data.
	 * 
	 * @return ICuentaDAO implementation
	 */
	public ICuentaDAO getCuentaDAO() {
		return new CuentaDAO();
	}

	/**
	 * This method instantiates the IDetalleCorrespondenciaDAO class for
	 * HibernateCore that is used in this applications deployment environment to
	 * access the data.
	 * 
	 * @return IDetalleCorrespondenciaDAO implementation
	 */
	public IDetalleCorrespondenciaDAO getDetalleCorrespondenciaDAO() {
		return new DetalleCorrespondenciaDAO();
	}

	/**
	 * This method instantiates the IDetalleFacturaDAO class for HibernateCore
	 * that is used in this applications deployment environment to access the
	 * data.
	 * 
	 * @return IDetalleFacturaDAO implementation
	 */
	public IDetalleFacturaDAO getDetalleFacturaDAO() {
		return new DetalleFacturaDAO();
	}

	/**
	 * This method instantiates the IDivisionDAO class for HibernateCore that is
	 * used in this applications deployment environment to access the data.
	 * 
	 * @return IDivisionDAO implementation
	 */
	public IDivisionDAO getDivisionDAO() {
		return new DivisionDAO();
	}

	/**
	 * This method instantiates the IEstadoDAO class for HibernateCore that is
	 * used in this applications deployment environment to access the data.
	 * 
	 * @return IEstadoDAO implementation
	 */
	public IEstadoDAO getEstadoDAO() {
		return new EstadoDAO();
	}

	/**
	 * This method instantiates the IFacturaDAO class for HibernateCore that is
	 * used in this applications deployment environment to access the data.
	 * 
	 * @return IFacturaDAO implementation
	 */
	public IFacturaDAO getFacturaDAO() {
		return new FacturaDAO();
	}

	/**
	 * This method instantiates the IGrupoFamiliarDAO class for HibernateCore
	 * that is used in this applications deployment environment to access the
	 * data.
	 * 
	 * @return IGrupoFamiliarDAO implementation
	 */
	public IGrupoFamiliarDAO getGrupoFamiliarDAO() {
		return new GrupoFamiliarDAO();
	}

	/**
	 * This method instantiates the IInmuebleDAO class for HibernateCore that is
	 * used in this applications deployment environment to access the data.
	 * 
	 * @return IInmuebleDAO implementation
	 */
	public IInmuebleDAO getInmuebleDAO() {
		return new InmuebleDAO();
	}

	/**
	 * This method instantiates the IMovMesInmuebleDAO class for HibernateCore
	 * that is used in this applications deployment environment to access the
	 * data.
	 * 
	 * @return IMovMesInmuebleDAO implementation
	 */
	public IMovMesInmuebleDAO getMovMesInmuebleDAO() {
		return new MovMesInmuebleDAO();
	}

	/**
	 * This method instantiates the IMultaDAO class for HibernateCore that is
	 * used in this applications deployment environment to access the data.
	 * 
	 * @return IMultaDAO implementation
	 */
	public IMultaDAO getMultaDAO() {
		return new MultaDAO();
	}

	/**
	 * This method instantiates the IPaisDAO class for HibernateCore that is
	 * used in this applications deployment environment to access the data.
	 * 
	 * @return IPaisDAO implementation
	 */
	public IPaisDAO getPaisDAO() {
		return new PaisDAO();
	}

	/**
	 * This method instantiates the IPersonaDAO class for HibernateCore that is
	 * used in this applications deployment environment to access the data.
	 * 
	 * @return IPersonaDAO implementation
	 */
	public IPersonaDAO getPersonaDAO() {
		return new PersonaDAO();
	}

	/**
	 * This method instantiates the IPresupuestoDAO class for HibernateCore that
	 * is used in this applications deployment environment to access the data.
	 * 
	 * @return IPresupuestoDAO implementation
	 */
	public IPresupuestoDAO getPresupuestoDAO() {
		return new PresupuestoDAO();
	}

	/**
	 * This method instantiates the IPropietarioInmuebleDAO class for
	 * HibernateCore that is used in this applications deployment environment to
	 * access the data.
	 * 
	 * @return IPropietarioInmuebleDAO implementation
	 */
	public IPropietarioInmuebleDAO getPropietarioInmuebleDAO() {
		return new PropietarioInmuebleDAO();
	}

	/**
	 * This method instantiates the IRecepcionDAO class for HibernateCore that
	 * is used in this applications deployment environment to access the data.
	 * 
	 * @return IRecepcionDAO implementation
	 */
	public IRecepcionDAO getRecepcionDAO() {
		return new RecepcionDAO();
	}

	/**
	 * This method instantiates the IReservaDAO class for HibernateCore that is
	 * used in this applications deployment environment to access the data.
	 * 
	 * @return IReservaDAO implementation
	 */
	public IReservaDAO getReservaDAO() {
		return new ReservaDAO();
	}

	/**
	 * This method instantiates the IRubroDAO class for HibernateCore that is
	 * used in this applications deployment environment to access the data.
	 * 
	 * @return IRubroDAO implementation
	 */
	public IRubroDAO getRubroDAO() {
		return new RubroDAO();
	}

	/**
	 * This method instantiates the ITipoCategoriaDAO class for HibernateCore
	 * that is used in this applications deployment environment to access the
	 * data.
	 * 
	 * @return ITipoCategoriaDAO implementation
	 */
	public ITipoCategoriaDAO getTipoCategoriaDAO() {
		return new TipoCategoriaDAO();
	}

	/**
	 * This method instantiates the ITipoConceptoDAO class for HibernateCore
	 * that is used in this applications deployment environment to access the
	 * data.
	 * 
	 * @return ITipoConceptoDAO implementation
	 */
	public ITipoConceptoDAO getTipoConceptoDAO() {
		return new TipoConceptoDAO();
	}

	/**
	 * This method instantiates the ITipoCorrespondenciaDAO class for
	 * HibernateCore that is used in this applications deployment environment to
	 * access the data.
	 * 
	 * @return ITipoCorrespondenciaDAO implementation
	 */
	public ITipoCorrespondenciaDAO getTipoCorrespondenciaDAO() {
		return new TipoCorrespondenciaDAO();
	}

	/**
	 * This method instantiates the ITipoDocumentoDAO class for HibernateCore
	 * that is used in this applications deployment environment to access the
	 * data.
	 * 
	 * @return ITipoDocumentoDAO implementation
	 */
	public ITipoDocumentoDAO getTipoDocumentoDAO() {
		return new TipoDocumentoDAO();
	}

	/**
	 * This method instantiates the ITipoPersonaDAO class for HibernateCore that
	 * is used in this applications deployment environment to access the data.
	 * 
	 * @return ITipoPersonaDAO implementation
	 */
	public ITipoPersonaDAO getTipoPersonaDAO() {
		return new TipoPersonaDAO();
	}

	/**
	 * This method instantiates the ITipoUsuarioDAO class for HibernateCore that
	 * is used in this applications deployment environment to access the data.
	 * 
	 * @return ITipoUsuarioDAO implementation
	 */
	public ITipoUsuarioDAO getTipoUsuarioDAO() {
		return new TipoUsuarioDAO();
	}

	/**
	 * This method instantiates the ITipoVehiculoDAO class for HibernateCore
	 * that is used in this applications deployment environment to access the
	 * data.
	 * 
	 * @return ITipoVehiculoDAO implementation
	 */
	public ITipoVehiculoDAO getTipoVehiculoDAO() {
		return new TipoVehiculoDAO();
	}

	/**
	 * This method instantiates the ITipoZonaComunDAO class for HibernateCore
	 * that is used in this applications deployment environment to access the
	 * data.
	 * 
	 * @return ITipoZonaComunDAO implementation
	 */
	public ITipoZonaComunDAO getTipoZonaComunDAO() {
		return new TipoZonaComunDAO();
	}

	/**
	 * This method instantiates the ITipoZonaExtraDAO class for HibernateCore
	 * that is used in this applications deployment environment to access the
	 * data.
	 * 
	 * @return ITipoZonaExtraDAO implementation
	 */
	public ITipoZonaExtraDAO getTipoZonaExtraDAO() {
		return new TipoZonaExtraDAO();
	}

	/**
	 * This method instantiates the IUnidadResidencialDAO class for
	 * HibernateCore that is used in this applications deployment environment to
	 * access the data.
	 * 
	 * @return IUnidadResidencialDAO implementation
	 */
	public IUnidadResidencialDAO getUnidadResidencialDAO() {
		return new UnidadResidencialDAO();
	}

	/**
	 * This method instantiates the IUsuarioDAO class for HibernateCore that is
	 * used in this applications deployment environment to access the data.
	 * 
	 * @return IUsuarioDAO implementation
	 */
	public IUsuarioDAO getUsuarioDAO() {
		return new UsuarioDAO();
	}

	/**
	 * This method instantiates the IVehiculoDAO class for HibernateCore that is
	 * used in this applications deployment environment to access the data.
	 * 
	 * @return IVehiculoDAO implementation
	 */
	public IVehiculoDAO getVehiculoDAO() {
		return new VehiculoDAO();
	}

	/**
	 * This method instantiates the IZonaComunDAO class for HibernateCore that
	 * is used in this applications deployment environment to access the data.
	 * 
	 * @return IZonaComunDAO implementation
	 */
	public IZonaComunDAO getZonaComunDAO() {
		return new ZonaComunDAO();
	}

	/**
	 * This method instantiates the IZonaExtraDAO class for HibernateCore that
	 * is used in this applications deployment environment to access the data.
	 * 
	 * @return IZonaExtraDAO implementation
	 */
	public IZonaExtraDAO getZonaExtraDAO() {
		return new ZonaExtraDAO();
	}
}
